package com.yunke.dto.chat;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import jakarta.validation.constraints.*;

/**
 * 发送消息请求DTO
 * 
 * @author yunke
 * @since 1.0.0
 */
@Data
@Schema(description = "发送消息请求")
public class YunkeSendMessageDto {

    /**
     * 接收者用户ID
     */
    @NotNull(message = "接收者用户ID不能为空")
    @Schema(description = "接收者用户ID", example = "1")
    private Long receiverId;

    /**
     * 消息类型：1-文字 2-图片 3-语音 4-位置
     */
    @NotNull(message = "消息类型不能为空")
    @Min(value = 1, message = "消息类型值不正确")
    @Max(value = 4, message = "消息类型值不正确")
    @Schema(description = "消息类型：1-文字 2-图片 3-语音 4-位置", example = "1")
    private Integer messageType;

    /**
     * 消息内容
     */
    @Schema(description = "消息内容", example = "你好！")
    private String content;

    /**
     * 媒体文件URL（图片、语音等）
     */
    @Schema(description = "媒体文件URL", example = "https://example.com/image.jpg")
    private String mediaUrl;

    /**
     * 语音时长（秒，仅语音消息）
     */
    @Schema(description = "语音时长（秒）", example = "10")
    private Integer voiceDuration;

    /**
     * 位置经度（仅位置消息）
     */
    @Schema(description = "位置经度", example = "116.447697")
    private Double longitude;

    /**
     * 位置纬度（仅位置消息）
     */
    @Schema(description = "位置纬度", example = "39.921373")
    private Double latitude;

    /**
     * 位置地址（仅位置消息）
     */
    @Schema(description = "位置地址", example = "北京市朝阳区三里屯SOHO")
    private String locationAddress;

    /**
     * 回复的消息ID
     */
    @Schema(description = "回复的消息ID", example = "msg_123456")
    private String replyMessageId;

    /**
     * 扩展数据（JSON格式）
     */
    @Schema(description = "扩展数据")
    private String extraData;
} 